﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Incident_Manager_PUCP
{
    public class GestorCliente
    {

        //Lucero Chavez La Valle: Implementación del Patron Solitario o Singleton para el Mantenimiento de Clientes en Gestor Clientes.
        //Se aplicó a este codigo ya que se instancia el gestor una sola vez y luego se reutiliza, mientras que las instancias de cliente son más volátiles.
        private static GestorCliente pinstancia = null;
        public List<Cliente> ListaClientes = new List<Cliente>();
  

        public static GestorCliente ObtenerInstancia()
        {
            if (pinstancia == null)
            {
                pinstancia = new GestorCliente();
                Console.WriteLine("Se creo instancia");
            }
            else Console.WriteLine("No se creo instancia");
            return pinstancia;
        }

        protected GestorCliente()
        {
            //ListaClientes.Capacity = 200;
        }

        public void RegistrarCliente(Cliente cli)
        {
            Console.Write("cliente con ruc: " + cli.getRUC());
            ListaClientes.Add(cli);
            
        }

        public void EliminarCliente(string codigo)
        {
            List<Cliente> listaTemp = new List<Cliente>();

            for (int i = 0; i < ListaClientes.Count(); i++)
            {
                if (codigo.CompareTo(ListaClientes[i].getRUC())==0)
                {
                    //seteo en blanco todos los atributos para poder quitarlo
                    ListaClientes[i].setRUC("");
                    ListaClientes[i].setDistrito("");
                    ListaClientes[i].setDireccion("");
                    ListaClientes[i].setEmailContacto("");
                    ListaClientes[i].setNombreContacto("");
                    ListaClientes[i].setRazonSocial("");
             
                }

            }

            for (int i = 0; i < ListaClientes.Count(); i++)
            {
                if (ListaClientes[i].getRUC().CompareTo("") != 0)
                {
                    //si no es vacio, lo copio a la lista temporal
                    listaTemp.Add(ListaClientes[i]);
                }
            }

            
            //limpio la lista anterior, ahora agregare la instancia de la lista temporal sin vacios...
            ListaClientes.Clear();

            ListaClientes = listaTemp;

        
        }

        public void ModificarCliente(string nruc, string direccion, string nomcontacto, string direccontacto, string distrito, string rsocial)
        {

            for (int i = 0; i < ListaClientes.Count(); i++)
            {
                if (nruc.CompareTo(ListaClientes[i].getRUC()) == 0)
                {
                    ListaClientes[i].setDireccion(direccion);
                    ListaClientes[i].setNombreContacto(nomcontacto);
                    ListaClientes[i].setEmailContacto(direccontacto);
                    ListaClientes[i].setDistrito(distrito);
                    ListaClientes[i].setRazonSocial(rsocial);
                }
            }

        }

        public List<Cliente> BuscarClientes(string ruc) {
            List<Cliente> cli = new List<Cliente>();

            for (int i = 0; i < ListaClientes.Count(); i++) {
                if (ruc.CompareTo(ListaClientes[i].getRUC()) == 0) {
                    cli.Add(ListaClientes[i]);

                }
            }

            return cli;

        }


    }
}
